<?php
/*
|--------------------------------------------------------------------------
| helper function
|--------------------------------------------------------------------------
 */

/**
 * send_sms
 *
 * @access public
 * @param int $phone phonenumber
 * @param array $datas array($code, minute)
 * @return array
 * @author melon<melonchild@outlook.com>
 */
function send_sms($phone, $datas, $tempId = '')
{
    $return['errno'] = 1;
    $return['message'] = "手机号有误";

    //判断手机号
    if (!preg_match("/^1[34578]{1}\d{9}$/", $phone)) {
        return $return;
    }

    // 初始化REST SDK
    $accountSid = "aaf98f895335f2be01533b0d8af909de";
    $accountToken = "13def111556942bd904e76135b3c928f";
    $appId = "8a216da8582367ed0158281b1913045d";
    $serverIP = "app.cloopen.com";
    $serverPort = '8883';
    $softVersion = '2013-12-26';

    $tempId = $tempId ? $tempId : 141481;

    $rest = new \REST($serverIP, $serverPort, $softVersion);
    $rest->setAccount($accountSid, $accountToken);
    $rest->setAppId($appId);

    // 发送模板短信
    $result = $rest->sendTemplateSMS($phone, $datas, $tempId);
    if ($result == null) {
        $return['errno'] = 2;
        $return['message'] = "短信服务器出错";

        return $return;
    }
    if ($result->statusCode != 0) {
        $return['errno'] = 3;
        $return['message'] = "短信服务器：" . $result->statusMsg;
    } else {
        $return['errno'] = 0;
        $return['message'] = "发送成功";
    }

    return $return;
}

/**
 * send_verify_code
 *
 * @access public
 * @param int $phone phone number
 * @param int $time limit time, default 5 min
 * @return array
 * @author melon<melonchild@outlook.com>
 */
function send_verify_code($phone, $time = 5)
{
    $return['errno'] = 1;
    $return['message'] = "手机号有误";

    if ($phone && preg_match("/^1[34578]{1}\d{9}$/", $phone)) {
        //生成验证码
        $data['code'] = rand(1000, 9999);
        $data['phone'] = $phone;
        $data['created_at'] = time() + $time * 60;
        $_SESSION['code'] = $data;
        $datas = array($data['code'], $time);
        $return = send_sms($phone, $datas);
    }

    return $return;
}

/**
 * 判断是否手机访问
 *
 * @return boolean
 */
function isMobile()
{
    // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
    if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
        return true;
    }
    //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
    if (isset($_SERVER['HTTP_VIA'])) {
        //找不到为flase,否则为true
        return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
    }
    //脑残法，判断手机发送的客户端标志,兼容性有待提高
    if (isset($_SERVER['HTTP_USER_AGENT'])) {
        $clientkeywords = array(
            'nokia',
            'sony',
            'ericsson',
            'mot',
            'samsung',
            'htc',
            'sgh',
            'lg',
            'sharp',
            'sie-',
            'philips',
            'panasonic',
            'alcatel',
            'lenovo',
            'iphone',
            'ipod',
            'blackberry',
            'meizu',
            'android',
            'netfront',
            'symbian',
            'ucweb',
            'windowsce',
            'palm',
            'operamini',
            'operamobi',
            'openwave',
            'nexusone',
            'cldc',
            'midp',
            'wap',
            'mobile',
        );
        // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
            return true;
        }
    }
    //协议法，因为有可能不准确，放到最后判断
    if (isset($_SERVER['HTTP_ACCEPT'])) {
        // 如果只支持wml并且不支持html那一定是移动设备
        // 如果支持wml和html但是wml在html之前则是移动设备
        if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
            return true;
        }
    }
    return false;
}
